package com.kk.crowd.mvc.handler;

import com.github.pagehelper.PageInfo;
import com.kk.crowd.service.api.RoleService;
import com.kk.crowd.entity.Role;
import com.kk.crowd.util.ResultEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class RoleHandler {

    @Autowired
    private RoleService roleService;

    @ResponseBody
    @RequestMapping("remove/id/list/rele.json")
    public ResultEntity<String> removeByRoleIdArray(@RequestBody List<Integer> roleIdList) {
        roleService.removeRole (roleIdList);
        return ResultEntity.successWithoutData ( );
    }

    @ResponseBody
    @RequestMapping("update/role.json")
    public ResultEntity<String> updateRole(Role role) {
        roleService.updateRole (role);
        return ResultEntity.successWithoutData ( );
    }

    /**
     * 添加
     *
     * @param role
     * @return
     */
    @ResponseBody
    @RequestMapping("save/role.json")
    public ResultEntity<String> saveRole(Role role) {
        roleService.saveRole (role);
        return ResultEntity.successWithoutData ( );
    }

    /**
     * 分页+搜索
     *
     * @param pageNum
     * @param pageSize
     * @param keyword
     * @return
     */
    //@PreAuthorize ("hasRole('部长')")
    //@PreAuthorize ("hasAuthority('user:save') or hasRole('大根的马仔')")
    @ResponseBody
    @RequestMapping("get/pageRole.json")
    public ResultEntity<PageInfo<Role>> getAjaxRole(
            Integer pageNum,
            Integer pageSize,
            String keyword
    ) {
        // 调用 Service 方法获取分页数据
        PageInfo<Role> pageInfo = roleService.getPageInfo (pageNum, pageSize, keyword);

        // 封装到 ResultEntity 对象中返回（如果上面的操作抛出异常，交给异常映射机制处理）
        return ResultEntity.successWithoutData (pageInfo);
    }

    // 一些没什么用的注解：
    // 1、@PostAuthorize：先执行方法然后根据方法返回值判断是否具备权限。
    //     例如：查询一个 Admin 对象，在@PostAuthorize 注解中和当前登录的 Admin 对象 进行比较，如果不一致，则判断为不能访问。实现“只能查自己”效果
    //     @PostAuthorize("returnObject.data.loginAcct == principal.username") 使用 returnObject 获取到方法返回值，使用 principal 获取到当前登录用户的主体对 象
    // 2、@PreFilter：在方法执行前对传入的参数进行过滤。只能对集合类型的数据进行过滤。
    // 3、@PostFilter：在方法执行后对方法返回值进行过滤。只能对集合类型的数据进行过滤。


}
